---
title: 数据库基本概念
description: E-R 模型、关系模型、关系代数
---

## 数据库系统

数据是数据库中存储的基本对象，是描述事物的符号记录。

数据的种类分为文本、图形、图像、音频、视频、学生的档案记录、货物的运输情况等。

### 数据库 DB
数据库 DB 是长期存储在计算机内、有组织的、可共享的大量数据的集合。

数据库的基本特征：
* 数据按一定的数据模型组织、描述和存储
* 可为各种用户共享
* 冗余度较小
* 数据独立性较高
* 易扩展
### 数据库系统 DBS
DBS 是一个采用了数据库技术，有组织地、动态地存储大量相关数据，方便多用户访问的计算机系统。其由下面四个部分组成：
* 数据库（统一管理、长期存储在计算机内的，有组织的相关数据的集合）
* 硬件（构成计算机系统包括存储数据所需的外部设备）
* 软件（操作系统、数据库管理系统及应用程序）
* 人员（系统分析及数据库设计人员、应用程序员、最终用户、数据库管理员 DBA）


### 数据库管理系统 DBMS
实现对共享数据的组织、管理和存取。

包括数据定义、数据库操作、数据库运行管理、数据的存储管理、数据库的建立和维护等。

## 三级模式-两级映像

<img src="https://wkq-img.oss-cn-chengdu.aliyuncs.com/20241020204829.png"/>

<RedSpan>内模式</RedSpan>：管理如何存储物理的数据，对应物理存储文件，优化、存放等。

<RedSpan>模式</RedSpan>：又称为概念模式，就是我们通常使用的基本表，根据应用、需求将物理表划分成一张张表。

<RedSpan>外模式</RedSpan>：对应数据库中的视图这个级别，将表进行一定的处理后再提供给用户使用。例如，将用户表中的用户名和密码组成视图提供给登录模块使用，而用户名中的其它列则不对该模块开放，增加了安全性。

:::tip
表是一个完整的模型，视图是表里面的一部分，正好是应用程序需要的那一部分，是一张假表，对视图进行修改，是不会影响真正的表的。
:::

<RedSpan>外模式-模式映像</RedSpan>：是表和视图之间的映射，存在于概念级和外部级之间，若表中的数据发生了修改，只需要修改此映射，而无需修改应用程序。

<RedSpan>模式-内模式映像</RedSpan>：是表和数据的物理存储之间的映射，存在于概念级和内部级之间，若修改了数据存储方式，只需要修改此映射，而不需要去修改应用程序。

以上的数据库系统实际上是一个分层次的设计，从底至上称为物理级数据库（实际上为一个数据库文件）、概念级数据库、用户级数据库。


## 数据库设计

需要记住四个流程，每个流程要做什么以及产出物。



1. 需求分析：即分析数据存储的要求，<RedSpan>产出物有数据流图、数据字典、需求说明书。</RedSpan>

2. 概念结构设计：就是<RedSpan>设计 E-R 图</RedSpan>，也即实体-联系图，与物理实现无关，说明有哪些实体，实体有那些属性。

3. 逻辑结构设计：<RedSpan>将 E-R 图，转换成关系模式</RedSpan>，也即转换成实际的表和表中的列属性，这里要考虑很多规范化的东西。

4. 物理设计：根据生成的表等概念，<RedSpan>生成物理数据库</RedSpan>。

<img src="https://wkq-img.oss-cn-chengdu.aliyuncs.com/20241020211709.png"/>

## 数据模型
<RedSpan>关系模型是二维表的形式表示的实体-联系模型</RedSpan>，是由实体-联系模型转换而来的，经过开发人员设计的；

<RedSpan>概念模型是从用户的角度进行建模的</RedSpan>，是现实世界到信息世界的第一抽象，是真正的实体-联系模型。

网状模型表示实体类型及其实体之间的联系，一个事物和另外几个都有联系，形成一张网。

面型对象模型是采用面向对象的方法设计数据库，以对象为单位，每个对象包括属性和方法，具有类和继承等特点。

数据模型的三要素：<RedSpan>数据结构</RedSpan>（所研究的对象类型的集合）、<RedSpan>数据操作</RedSpan>（对数据库中的各种对象允许执行的操作的集合）、<RedSpan>数据的约束条件</RedSpan>（一组完整性规则的集合）



### E-R 模型

用 E-R 图来描述概念数据模型，世界是由一组称为实体的基本对象和这些对象之间的联系构成的。


在 E-R 模型中，使用椭圆表示属性（一般没有）、矩形表示实体、双边矩形表示弱实体、菱形表示联系，联系的两端要填写联系类型，示例如下图：

<img src="https://wkq-img.oss-cn-chengdu.aliyuncs.com/20241020223051.png" alt={'超市管理系统 E-R 图示例'}/>


* 实体：<RedSpan>客观存在并可相互区别的事物。</RedSpan>可以是具体的人、事、物或抽象概念。如 人、汽车、图书、账户、贷款。
* 弱实体和强实体：弱实体依赖于强实体的存在而存在，用双边矩形表示。上图中的经理、部门经理、业务员都是弱实体，依赖于员工这个强实体。
* 实体集： 具有相同类型和共享相同属性的实体的集合，如学生、课程。

* 属性：<RedSpan>实体所具有的特性</RedSpan>。
* 属性分类：简单属性和复合属性（多个简单属性组成，比如家庭住址）；单值属性和多值属性（可以取多个值的属性，比如电话号码）；NULL 属性（无意义）；派生属性（由其它的属性计算生成）。
* 域：属性的取值范围称为该属性的域。
* 码（Key）：唯一标识实体的属性集。

* 联系：现实世界中<RedSpan>事物内部以及事物之间的联系</RedSpan>，在 E-R 图中反映为<RedSpan>实体内部的联系和实体之间的联系。</RedSpan>

* 联系类型：<RedSpan>一对一 1:1,一对多 1:N、多对多 N:N</RedSpan>。

#### 两个以上实体型的联系

<img src="https://wkq-img.oss-cn-chengdu.aliyuncs.com/20241020222242.png" alt="两个以上实体型的联系"/>

### 关系模型
关系模型中数据的逻辑结构是一张<RedSpan>二维表</RedSpan>，由行列组成。用表格结构表达实体集，用外键标识实体间的联系。如下图。

<img src="https://wkq-img.oss-cn-chengdu.aliyuncs.com/20241020222759.png"/>

行叫做元组或水平记录，列叫做属性。

* 优点：建立在严格的数学概念基础上；概念单一、结构简单、清晰，用户易懂易用；存取路径对用户透明，从而数据独立性好、安全性好，简化数据库开发工作。
* 缺点：由于存取路径透明，查询效率往往不如非关系数据模型。

### E-R 模型转换为关系模型
:::tip
需求分析之后就是概念结构设计，概念结构设计就是设计出 E-R 图，然后就是逻辑结构设计，即将 E-R 图转换成关系模型（是我们真正需要的），物理设计就是根据关系模型创建出物理的表结构。
:::
<RedSpan>每个实体都对应一个关系模式</RedSpan>,不包含弱实体(比如员工和经理，可以用一个属性标识)；联系分为三类：

* 1:1 联系中，联系可以<RedSpan>放到任意的两端实体中，作为一个属性</RedSpan>，（要保证1:1两端的关联），也可以转换为一个单独的关系模式。
* 1:N 联系中，联系可以单独作为一个关系模式，也可以在 <RedSpan> N 端加入 1 端实体的主键</RedSpan>。
* M:N 联系中，联系<RedSpan>必须作为一个单独的关系模式，其主键是 M 和 N 端的联合主键。 </RedSpan>




## 关系代数
关系代数就是指表（关系模型）之间的逻辑运算。

### 基础运算
* 并：结果是两张表中所有记录数合并，相同记录只显示一次。
* 交：结果是两张表中相同的记录。
* 差：$S_1-S_2$ ,结果是 $S_1$ 表中有而  $S_2$ 表中没有的那些记录。

### 笛卡尔积
$S_1 \times S_2$，产生的结果包括 $S_1$ 和 $S_2$ 的所有的属性列，并且 $S_1$ 中每条记录依次和 $S_2$  中所有记录组合成一条记录，最终属性列为 $S_1+S_2$ 属性列，记录数为 $S_1 \times S_2$ 记录数。

:::tip
并关系重复的记录只会显示一次，而笛卡尔积重复的也会重复显示。

笛卡尔积的列是两张表的列。
:::

* 投影（$\Pi$）：实际是按条件选择某关系模式中的<RedSpan>某列，列也可以用数字表示</RedSpan>。
* 选择（$\sigma$）：实际是按条件选择某关系模式中的<RedSpan>某条记录</RedSpan>。

### 自然连接
自然连接的符号是 $\Join$, 自然连接的结果 <RedSpan>显示全部的属性列，但是相同属性列只显示一次，显示两个关系模式中属性相同且值相同的记录。</RedSpan>

设有关系 R、S 如下左图所示，自然连接结果如下右图所示：


![](https://wkq-img.oss-cn-chengdu.aliyuncs.com/ruankao202410212212503.png)

:::tip
笛卡尔积转自然连接，使用投影运算从笛卡尔积中挑选出不重复的列，然后使用选择运算把行相同的也筛选出来。

:::

效率问题：关系代数运算的效率，归根结底是看参数运算的两张表格的属性列数和记录数，属性列和和记录数越少，参与运算的次数自然越少，效率就越高。因此，效率高的运算一般都是在两张表格参与运算之前就将条件判断完。


